#include <malloc.h>
#include <memory.h>
#include "Buffer.h"
//
Buffer::Buffer(void *data, size_t len) {
	_init(data, len);
}
//
Buffer::Buffer(std::string& str, bool includeZero) {
	_init((void*)str.c_str(), str.size() * sizeof(str.c_str()[0]) + (includeZero ? 1 : 0) * sizeof(str.c_str()[0]));
}
//
Buffer::Buffer(std::wstring& str, bool includeZero) {
	_init((void*)str.c_str(), str.size() * sizeof(str.c_str()[0]) + (includeZero ? 1 : 0) * sizeof(str.c_str()[0]));
}
//
size_t Buffer::getLength() {
	return _len;
}
//
void* Buffer::getData() {
	return _data;
}
//
Buffer& Buffer::clone() {
	return *new Buffer(getData(), getLength());
}
//
void Buffer::clear() {
	if (_data != 0)
		free(_data);
	_data = 0;
	_len = 0;
}
//
Buffer::~Buffer() {
	clear();
}
//
void Buffer::_init(void *data, size_t len) {
	_data = malloc(len);
	if (_data != 0) {
		memcpy(_data, data, len);
		_len = len;
	} else {
		_data = 0;
		_len = 0;
	}
}
